package main

import (
	"encoding/json"

	"jlpay-sdk-go/pkg/jlpay/demo"
	"jlpay-sdk-go/pkg/jlpay/models/trans/common"
	servicecommon "jlpay-sdk-go/pkg/jlpay/services/trans/common"
	"jlpay-sdk-go/pkg/jlpay/utils"
)

// 支付类型常量 - 业务参数，在demo中定义
const (
	PAY_TYPE_WECHAT = "wxpay"    // 微信支付
	PAY_TYPE_ALIPAY = "alipay"   // 支付宝支付
	PAY_TYPE_UNION  = "unionpay" // 银联支付
)

// 终端类型常量 - 业务参数，在demo中定义
const (
	TERMINAL_TYPE = "N50007A8890" // 终端号
)

// 构建预授权关闭请求
func buildPreAuthCloseRequest() *common.PreAuthCloseRequest {
	request := common.NewPreAuthCloseRequest()

	// 设置请求参数
	request.SetMchID("849584358120018")
	request.SetTermNo(TERMINAL_TYPE)
	request.SetPayType(PAY_TYPE_WECHAT)
	request.SetOutTradeNo("ld201911023465529")
	request.SetOriOutTradeNo("ld2019102216465525")
	request.SetOriTransactionID("80011557201909171853011568")
	request.SetGuaranteeAuthCode("TEST_AUTH_CODE")
	request.SetTotalFee("100")
	request.SetRemark("测试预授权关闭")
	request.SetDeviceInfo("test_device")
	request.SetMchCreateIP("127.0.0.1")
	request.SetTransAddress("北京市朝阳区")
	request.SetAreaCode("110000")
	request.SetLongitude("116.397128")
	request.SetLatitude("39.916527")

	return request
}

// 预授权关闭示例
func preAuthCloseDemo() {

	// 创建配置对象和预授权关闭服务
	config := demo.CreateDemoConfig()
	preAuthCloseService := servicecommon.NewPreAuthCloseService(config)

	// 创建预授权关闭请求
	request := buildPreAuthCloseRequest()

	// 序列化请求数据并打印
	requestMap, _ := request.ToMap()
	requestJSON, _ := json.Marshal(requestMap)
	utils.Debugf("预授权关闭请求数据: %s", string(requestJSON))

	// 发送请求
	response, err := preAuthCloseService.PreAuthClose(request)
	if err != nil {
		utils.Errorf("预授权关闭请求失败: %v", err)
		return
	}

	// 处理响应
	utils.HandleResponse(response, "预授权关闭")
}

func main() {
	// 设置日志级别为info，显示详细的调试信息
	utils.SetLogLevel("info")

	utils.Info("=============================")
	utils.Info("===== 预授权关闭示例 开始 =====")
	utils.Info("=============================")

	preAuthCloseDemo()
	utils.Info("=============================")
	utils.Info("===== 预授权关闭示例 开始 =====")
	utils.Info("=============================")

}
